package com.demo.java.OD51_100.OD94;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【数据分类】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145661573
 */
public class OdMain {
    // 计算数字的二进制转换后按照规则的结果
    public static int solve(int num) {
        String s = Integer.toBinaryString(num);  // 转换成二进制字符串
        int sum = 0;
        while (s.length() > 8) {
            String temp = s.substring(s.length() - 8);  // 取最后8位
            sum += Integer.parseInt(temp, 2);  // 计算二进制值
            s = s.substring(0, s.length() - 8);  // 截去已处理的部分
        }
        sum += Integer.parseInt(s, 2);  // 处理剩下的部分
        return sum;
    }

    public static void main(String[] args) {
        try {
            Scanner s = new Scanner(System.in);
            String[] values = s.nextLine().split(" ");  // 输入
            int c = Integer.parseInt(values[0]);  // 类别数
            int b = Integer.parseInt(values[1]);  // 取模值
            int[] array = new int[b];  // 存储每个类别的计数

            // 处理每个数字并进行分类
            for (int j = 2; j < values.length; ++j) {
                int result = solve(Integer.parseInt(values[j])) % b;  // 计算并分类
                if (c > result) {  // 如果符合分类条件，增加该类别的计数
                    ++array[result];
                }
            }

            // 查找最大类别的数量
            int result = -1;
            for (int j = 0; j < array.length; j++) {
                result = Math.max(result, array[j]);
            }
            System.out.println(result);  // 输出最大值
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("false");  // 异常时输出
        }
    }
}